#ifndef CIRCLE_H
#define CIRCLE_H

#include <object.h>
#include <surface.h>

typedef struct circle
{
  object_t obj;
  coord_t center;
  uint16_t radius;
} circle_t;


circle_t *
circle_new( void );

void
circle_free( circle_t *circle );

char *
circle_str( circle_t *circle );

void
__circle_draw( circle_t *circle, surface_t *surface );

void
circle_draw( circle_t *circle, surface_t *surface );


/*
 * You may want to experiment with circle drawing algorithms changing this
 * function pointers.
 */
extern void (*circle_draw_aliased)( uint16_t, uint16_t, uint16_t,
				    surface_t *, color_t, float, int);

extern void (*circle_draw_antialiased)( uint16_t, uint16_t, uint16_t,
					surface_t *, color_t, float, int );

void
circle_draw_trivial( uint16_t x, uint16_t y, uint16_t radius,
		     surface_t *surface, color_t color,
		     float transp, int fill );

void
circle_draw_bresenham( uint16_t x, uint16_t y, uint16_t radius,
		       surface_t *surface, color_t color,
		       float transp, int fill );

void
circle_draw_trivial_antialias( uint16_t x, uint16_t y, uint16_t radius,
			       surface_t *surface, color_t color,
			       float transp, int fill );

#endif /* CIRCLE_H */
